home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / x / volume2 / xbrowser / part02 < prev    next >
Encoding:
Internet Message Format  |  1989-01-03  |  54.6 KB

  1. Path: uunet!wyse!mikew
  2. From: mikew@wyse.wyse.com (Mike Wexler)
  3. Newsgroups: comp.sources.x
  4. Subject: v02i070:  a browser, Part02/03
  5. Message-ID: <1954@wyse.wyse.com>
  6. Date: 3 Jan 89 20:53:45 GMT
  7. Organization: Wyse Technology, San Jose
  8. Lines: 1968
  9. Approved: mikew@wyse.com
  10.  
  11. Submitted-by:  Schlichter.Wbst@Xerox.COM (Hans Schlichter)
  12. Posting-number: Volume 2, Issue 70
  13. Archive-name: xbrowser/part02
  14.  
  15. #! /bin/sh
  16. # This is a shell archive.  Remove anything before this line, then unpack
  17. # it by saving it into a file and typing "sh file".  To overwrite existing
  18. # files, type "sh file -c".  You can also feed this as standard input via
  19. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  20. # will see the following message at the end:
  21. #        "End of archive 2 (of 3)."
  22. # Contents:  modcommand.c option.c popup.c scandir.c toggle.c
  23. #   xfilebrowser.c
  24. # Wrapped by mikew@wyse on Tue Jan  3 12:03:48 1989
  25. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  26. if test -f 'modcommand.c' -a "${1}" != "-c" ; then 
  27.   echo shar: Will not clobber existing file \"'modcommand.c'\"
  28. else
  29. echo shar: Extracting \"'modcommand.c'\" \(3455 characters\)
  30. sed "s/^X//" >'modcommand.c' <<'END_OF_FILE'
  31. X/* Systems Sciences Laboratory, Webster Research Center */
  32. X
  33. Xstatic char *PROGRAM_information[] =
  34. X{
  35. X    "Copyright (c) 1988 Xerox Corporation.  All rights reserved.",
  36. X    "$Header$",
  37. X    "$Locker$"
  38. X}
  39. X;
  40. X
  41. X/*
  42. X * Copyright protection claimed includes all forms and matters of copyrightable
  43. X * material and information now allowed by statutory or judicial lay or
  44. X * herinafter granted, including without limitation, material generated from
  45. X * the software programs which are displayed on the screen such as icons,
  46. X * screen display looks, etc.
  47. X */
  48. X
  49. X
  50. X/*
  51. X * this defines modifications to the command button widget;
  52. X * it redefines the translation table to accept input from
  53. X * all three mouse buttons; the notify routine is redone to
  54. X * return the number of the pressed mouse button as the call_data
  55. X * parameter;
  56. X *
  57. X */
  58. X
  59. X#include "xfilebrowser.h"
  60. X#include <X11/IntrinsicP.h>
  61. X#include <X11/CommandP.h>
  62. X
  63. X
  64. X/* Private Data */
  65. Xextern void My_Notify();
  66. Xextern void My_Double();
  67. X
  68. Xstatic char defaultTranslations[] =
  69. X    "<Btn1Down>:    set() \n\
  70. X     <Btn1Up>:        mynotify(1) unset() \n\
  71. X     <Btn2Down>:    set() \n\
  72. X     <Btn2Up>:        mynotify(2) unset() \n\
  73. X     <Btn3Down>:    set() \n\
  74. X     <Btn3Up>:        mynotify(3) unset()";
  75. X
  76. Xstatic char textTranslations[] =
  77. X     "<Btn1Up>(2):    mydouble()";
  78. X
  79. X
  80. Xstatic XtActionsRec actionsList[] =
  81. X{
  82. X  {"mynotify",        My_Notify},
  83. X};
  84. X
  85. Xstatic XtActionsRec actionsText[] =
  86. X{
  87. X  {"mydouble",        My_Double},
  88. X};
  89. X
  90. X
  91. X/************************************
  92. X*
  93. X*  Modifications for command buttons
  94. X*
  95. X*************************************/
  96. X
  97. X
  98. X
  99. X/* ARGSUSED */
  100. Xvoid ModCommand_Init(command)
  101. XWidget command;
  102. X{
  103. X    XtTranslations modtable;
  104. X
  105. X    modtable = XtParseTranslationTable(defaultTranslations);
  106. X    XtOverrideTranslations(command, modtable);
  107. X    XtAddActions(actionsList, 1);
  108. X} 
  109. X
  110. X/***************************
  111. X*
  112. X*  Action Procedures
  113. X*
  114. X***************************/
  115. X
  116. X
  117. X/* ARGSUSED */
  118. Xstatic void My_Notify(w, event, params, num_params)
  119. XWidget w;
  120. XXEvent *event;
  121. XString *params;
  122. XCardinal *num_params;
  123. X{
  124. X    CommandWidget cbw = (CommandWidget)w;
  125. X    int button;
  126. X
  127. X    if (cbw->command.set) {
  128. X         button = 0;
  129. X         if (params[0] != NULL) {
  130. X             if (*params[0] == '1') button = 1;
  131. X             else if (*params[0] == '2') button = 2;
  132. X             else if (*params[0] == '3') button = 3;
  133. X       }
  134. X         XtCallCallbacks(w, XtNcallback, (caddr_t)button);
  135. X    }
  136. X}
  137. X
  138. X
  139. X/************************************
  140. X*
  141. X*  Modifications for text widgets
  142. X*
  143. X*************************************/
  144. X
  145. X/* ARGSUSED */
  146. Xvoid Modtext_Init(command)
  147. XWidget command;
  148. X{
  149. X    XtTranslations modtable;
  150. X
  151. X    modtable = XtParseTranslationTable(textTranslations);
  152. X    XtOverrideTranslations(command, modtable);
  153. X    XtAddActions(actionsText, 1);
  154. X} 
  155. X
  156. X/* ARGSUSED */
  157. Xstatic void My_Double(w, event, params, num_params)
  158. XWidget w;
  159. XXEvent *event;
  160. XString *params;
  161. XCardinal *num_params;
  162. X{
  163. X    XtTextPosition pos1, pos2;
  164. X    int i;
  165. X    long view_edit = (viewEdit ? 2 : 1); 
  166. X    struct stat buf; 
  167. X
  168. X    if (w == listwidget) {
  169. X       XtTextGetSelectionPos(listwidget, &pos1, &pos2);
  170. X       if (pos1 != pos2 && numfiles != 0 && 
  171. X          ( (i = select_file(pos1, pos2)) != -1)) {
  172. X           if (stat((*files[i]).d_name, &buf) == -1) {
  173. X            disp_message("\ncannot check file stats");
  174. X               return;
  175. X            }
  176. X       }
  177. X       else return;
  178. X
  179. X        if (buf.st_mode & S_IFDIR) 
  180. X           DoList(listbutton, (caddr_t)NULL, (caddr_t)0);
  181. X       else 
  182. X           DoEdit(editbutton, (caddr_t)NULL, (caddr_t)view_edit);
  183. X    }
  184. X    else if (w == grepwidget) 
  185. X       DoGrepEdit(grepbutton, (caddr_t)NULL, (caddr_t)view_edit);
  186. X}
  187. END_OF_FILE
  188. if test 3455 -ne `wc -c <'modcommand.c'`; then
  189.     echo shar: \"'modcommand.c'\" unpacked with wrong size!
  190. fi
  191. # end of 'modcommand.c'
  192. fi
  193. if test -f 'option.c' -a "${1}" != "-c" ; then 
  194.   echo shar: Will not clobber existing file \"'option.c'\"
  195. else
  196. echo shar: Extracting \"'option.c'\" \(8712 characters\)
  197. sed "s/^X//" >'option.c' <<'END_OF_FILE'
  198. X/* Systems Sciences Laboratory, Webster Research Center */
  199. X
  200. Xstatic char *PROGRAM_information[] =
  201. X{
  202. X    "Copyright (c) 1988 Xerox Corporation.  All rights reserved.",
  203. X    "$Header$",
  204. X    "$Locker$"
  205. X}
  206. X;
  207. X
  208. X/*
  209. X * Copyright protection claimed includes all forms and matters of copyrightable
  210. X * material and information now allowed by statutory or judicial lay or
  211. X * herinafter granted, including without limitation, material generated from
  212. X * the software programs which are displayed on the screen such as icons,
  213. X * screen display looks, etc.
  214. X */
  215. X
  216. X
  217. X/* NOTE: This is modelled after the dialog widget!  
  218. X   Rather, this is an interface to a widget.
  219. X   It implements policy, and gives a (hopefully) easier-to-use interface
  220. X   than just directly making your own form. */
  221. X
  222. X
  223. X#include <X11/Xlib.h>
  224. X#include <X11/Xos.h>
  225. X#include <X11/IntrinsicP.h>
  226. X#include <X11/XawMisc.h>
  227. X#include <X11/StringDefs.h>
  228. X#include <X11/AsciiText.h>
  229. X#include <X11/Command.h>
  230. X#include <X11/Label.h>
  231. X#include "optionP.h"
  232. X#include "toggleP.h"
  233. X#include <ctype.h>
  234. X
  235. X#define offset(field) XtOffset(OptionWidget, field)
  236. X
  237. X
  238. Xstatic XtResource resourcelist[] = {
  239. X  {XtNlabel, XtCLabel, XtRString, sizeof(String),
  240. X     offset(option.label), XtRString, NULL},
  241. X  {XtNorientation, XtCOrientation, XtROrientation, sizeof(XtOrientation),
  242. X     offset(option.orientation), XtRString, "orientVertical"},
  243. X};
  244. X
  245. Xextern void Initialize(), ConstraintInitialize();
  246. Xextern Boolean SetValues();
  247. Xextern void DoOption();
  248. X
  249. XOptionClassRec optionClassRec = {
  250. X  { /* core_class fields */
  251. X    /* superclass         */    (WidgetClass) &formClassRec,
  252. X    /* class_name         */    "Option",
  253. X    /* widget_size        */    sizeof(OptionRec),
  254. X    /* class_initialize   */    NULL,
  255. X    /* class_part init    */    NULL,
  256. X    /* class_inited       */    FALSE,
  257. X    /* initialize         */    Initialize,
  258. X    /* initialize_hook    */    NULL,
  259. X    /* realize            */    XtInheritRealize,
  260. X    /* actions            */    NULL,
  261. X    /* num_actions        */    0,
  262. X    /* resources          */    resourcelist,
  263. X    /* num_resources      */    XtNumber(resourcelist),
  264. X    /* xrm_class          */    NULLQUARK,
  265. X    /* compress_motion    */    TRUE,
  266. X    /* compress_exposure  */    TRUE,
  267. X    /* compress_enterleave*/    TRUE,
  268. X    /* visible_interest   */    FALSE,
  269. X    /* destroy            */    NULL,
  270. X    /* resize             */    XtInheritResize,
  271. X    /* expose             */    XtInheritExpose,
  272. X    /* set_values         */    SetValues,
  273. X    /* set_values_hook    */    NULL,
  274. X    /* set_values_almost  */    XtInheritSetValuesAlmost,
  275. X    /* get_values_hook    */    NULL,
  276. X    /* accept_focus       */    NULL,
  277. X    /* version            */    XtVersion,
  278. X    /* callback_private   */    NULL,
  279. X    /* tm_table           */    NULL,
  280. X    /* query_geometry     */    NULL,
  281. X    /* display_accelerator*/    XtInheritDisplayAccelerator,
  282. X    /* extension      */    NULL,
  283. X
  284. X  },
  285. X  { /* composite_class fields */
  286. X    /* geometry_manager   */   XtInheritGeometryManager,
  287. X    /* change_managed     */   XtInheritChangeManaged,
  288. X    /* insert_child       */   XtInheritInsertChild,
  289. X    /* delete_child       */   XtInheritDeleteChild,
  290. X    /* extension         */   NULL,
  291. X  },
  292. X  { /* constraint_class fields */
  293. X    /* subresourses       */   NULL,
  294. X    /* subresource_count  */   0,
  295. X    /* constraint_size    */   sizeof(OptionConstraintsRec),
  296. X    /* initialize         */   ConstraintInitialize,
  297. X    /* destroy            */   NULL,
  298. X    /* set_values         */   NULL
  299. X  },
  300. X  { /* form_class fields */
  301. X    /* empty              */   0
  302. X  },
  303. X  { /* option_class fields */
  304. X    /* empty              */   0
  305. X  }
  306. X};
  307. X
  308. XWidgetClass optionWidgetClass = (WidgetClass)&optionClassRec;
  309. X
  310. X/****************************************************************
  311. X *
  312. X * Private Procedures
  313. X *
  314. X ****************************************************************/
  315. X
  316. X/* ARGSUSED */
  317. Xstatic void Initialize(request, new)
  318. XWidget request, new;
  319. X{
  320. X    OptionWidget dw = (OptionWidget)new;
  321. X    static Arg label_args[] = {
  322. X       {XtNlabel, (XtArgVal)NULL},
  323. X       {XtNborderWidth, (XtArgVal) 0}
  324. X       };
  325. X
  326. X    label_args[0].value = (XtArgVal)dw->option.label;
  327. X    dw->option.labelW = XtCreateManagedWidget( "label", 
  328. X                labelWidgetClass, new,
  329. X                label_args, XtNumber(label_args) );
  330. X    dw->option.select = 0;
  331. X}
  332. X
  333. X
  334. X/* ARGSUSED */
  335. Xstatic void ConstraintInitialize(request, new)
  336. XWidget request, new;
  337. X{
  338. X    OptionWidget dw = (OptionWidget)new->core.parent;
  339. X    WidgetList children = dw->composite.children;
  340. X    OptionConstraints constraint = (OptionConstraints)new->core.constraints;
  341. X    Widget *childP;
  342. X
  343. X    if (!XtIsSubclass(new, toggleWidgetClass))    /* if not a toggle */
  344. X    return;                    /* then just use defaults */
  345. X
  346. X    constraint->form.left = constraint->form.right = XtChainLeft;
  347. X    constraint->form.vert_base = dw->option.labelW;
  348. X
  349. X    if (dw->composite.num_children > 1) {
  350. X        for (childP = children + dw->composite.num_children - 1;
  351. X         childP >= children; childP-- ) {
  352. X        if (*childP == dw->option.labelW)
  353. X            break;
  354. X        if (XtIsManaged(*childP) &&
  355. X        XtIsSubclass(*childP, toggleWidgetClass)) {
  356. X            if (dw->option.orientation == XtorientHorizontal)
  357. X            constraint->form.horiz_base = *childP;
  358. X        else    constraint->form.vert_base = *childP;
  359. X        break;
  360. X        }
  361. X    }
  362. X    }
  363. X}
  364. X
  365. X/***************************
  366. X*
  367. X*  Action Procedures
  368. X*
  369. X***************************/
  370. X
  371. Xstatic void DoOption(w, client_data, call_data)
  372. XWidget w;
  373. Xcaddr_t client_data, call_data;
  374. X{
  375. X    ToggleWidget tw = (ToggleWidget)w;
  376. X    OptionWidget parent = (OptionWidget)tw->core.parent;
  377. X    XtState newstate = (XtState)call_data;
  378. X    Arg togglearg[1];
  379. X    Boolean found = 0;
  380. X    int i = 1;
  381. X
  382. X    if (newstate == XtToggleOff) {
  383. X        /* the currently selected toggle button is selected */
  384. X       XtSetArg(togglearg[0], XtNstate, XtToggleOn);
  385. X       XtSetValues(w, togglearg, (Cardinal)1);
  386. X       return;
  387. X    }
  388. X    else {
  389. X       XtSetArg(togglearg[0], XtNstate, XtToggleOff);
  390. X
  391. X       XtSetValues(parent->composite.children[parent->option.select], 
  392. X            togglearg, (Cardinal)1);
  393. X    }
  394. X
  395. X    while (!found && i < parent->composite.num_children) 
  396. X       if ((Widget)parent->composite.children[i] == w) {
  397. X        found = 1;
  398. X        parent->option.select = i;
  399. X        break;
  400. X       }
  401. X       else i++;
  402. X}
  403. X
  404. X/* ARGSUSED */
  405. Xstatic Boolean SetValues(current, request, new)
  406. XWidget current, request, new;
  407. X{
  408. X    return False;
  409. X}
  410. X
  411. Xvoid DoHorizontalOption(parent, left, upper)
  412. XOptionWidget parent;
  413. XWidget *left, *upper;
  414. X{
  415. X    *left = (Widget) parent->option.label;
  416. X
  417. X    if ( (parent->composite.num_children > 1) )
  418. X              *upper = (Widget)parent->
  419. X           composite.children[parent->composite.num_children - 1];
  420. X    else     *upper = (Widget)NULL;
  421. X}
  422. X
  423. Xvoid DoVerticalOption(parent, left, upper)
  424. XOptionWidget parent;
  425. XWidget *left, *upper;
  426. X{
  427. X    *upper = (Widget)parent->
  428. X    composite.children[parent->composite.num_children - 1];
  429. X
  430. X    *left = (Widget)NULL;
  431. X}
  432. X
  433. Xvoid XtOptionAddOption(option, name, set)
  434. XWidget option;
  435. Xchar *name;
  436. XBoolean set;
  437. X{
  438. X    OptionWidget parent = (OptionWidget)option;
  439. X    Widget left, upper;
  440. X    Arg togglearg[1];
  441. X    static XtCallbackRec callbackList[] = { {NULL, NULL}, {NULL, NULL} };
  442. X
  443. X    static Arg arglist[] = {
  444. X       {XtNfromHoriz, (XtArgVal) NULL},
  445. X       {XtNfromVert, (XtArgVal) NULL},
  446. X       {XtNstate, (XtArgVal) NULL},
  447. X       {XtNcallback,(XtArgVal)callbackList},
  448. X       {XtNleft, (XtArgVal) XtChainLeft},
  449. X       {XtNright, (XtArgVal) XtChainLeft},
  450. X       {XtNtop, (XtArgVal) XtChainTop},
  451. X       {XtNbottom, (XtArgVal) XtChainTop}
  452. X    };
  453. X
  454. X    if (parent->option.orientation == XtorientHorizontal)
  455. X        DoHorizontalOption(parent, &left, &upper);
  456. X    else    DoVerticalOption(parent, &left, &upper);
  457. X
  458. X    arglist[0].value = (XtArgVal)left;
  459. X    arglist[1].value = (XtArgVal)upper;
  460. X
  461. X    if (set && parent->option.select != 0) {
  462. X       arglist[2].value = (XtArgVal)XtToggleOn;
  463. X            /* reset existing toggle widget */
  464. X       XtSetArg(togglearg[0], XtNstate, XtToggleOff);
  465. X       XtSetValues(parent->composite.children[parent->option.select],
  466. X         togglearg, (Cardinal)1);
  467. X       parent->option.select = parent->composite.num_children;
  468. X    }       
  469. X    else if (parent->option.select == 0) {
  470. X       arglist[2].value = (XtArgVal)XtToggleOn;
  471. X       parent->option.select = parent->composite.num_children;
  472. X    }
  473. X    else arglist[2].value = (XtArgVal)XtToggleOff;    
  474. X
  475. X    callbackList[0].callback = DoOption;
  476. X
  477. X    XtCreateManagedWidget(name, toggleWidgetClass, option, 
  478. X            arglist, XtNumber(arglist) );
  479. X}
  480. X
  481. X
  482. Xint XtOptionGetSelection(w)
  483. XWidget w;
  484. X{
  485. X    return ((OptionWidget)w)->option.select;
  486. X}
  487. X
  488. Xvoid XtOptionSetSelection(w, index)
  489. XWidget w;
  490. Xint index;
  491. X{
  492. X    Arg toggleargs[1];
  493. X    OptionWidget parent = (OptionWidget)w;
  494. X
  495. X    XtSetArg(toggleargs[0], XtNstate, XtToggleOff);
  496. X    XtSetValues(parent->composite.children[parent->option.select],
  497. X        toggleargs, XtNumber(toggleargs));
  498. X
  499. X    XtSetArg(toggleargs[0], XtNstate, XtToggleOn);
  500. X    XtSetValues(parent->composite.children[index],
  501. X        toggleargs, XtNumber(toggleargs));
  502. X    parent->option.select = index;
  503. X}
  504. END_OF_FILE
  505. if test 8712 -ne `wc -c <'option.c'`; then
  506.     echo shar: \"'option.c'\" unpacked with wrong size!
  507. fi
  508. # end of 'option.c'
  509. fi
  510. if test -f 'popup.c' -a "${1}" != "-c" ; then 
  511.   echo shar: Will not clobber existing file \"'popup.c'\"
  512. else
  513. echo shar: Extracting \"'popup.c'\" \(10444 characters\)
  514. sed "s/^X//" >'popup.c' <<'END_OF_FILE'
  515. X/* Systems Sciences Laboratory, Webster Research Center */
  516. X
  517. Xstatic char *PROGRAM_information[] =
  518. X{
  519. X    "Copyright (c) 1988 Xerox Corporation.  All rights reserved.",
  520. X    "$Header$",
  521. X    "$Locker$"
  522. X}
  523. X;
  524. X
  525. X/*
  526. X * Copyright protection claimed includes all forms and matters of copyrightable
  527. X * material and information now allowed by statutory or judicial lay or
  528. X * herinafter granted, including without limitation, material generated from
  529. X * the software programs which are displayed on the screen such as icons,
  530. X * screen display looks, etc.
  531. X */
  532. X
  533. X#include "xfilebrowser.h"
  534. X
  535. XWidget confirmwidget = NULL;
  536. Xstatic Widget confirmshell = NULL;
  537. Xstatic Widget extpromptwidget = NULL;        /* specifies the form widget
  538. X                in case a prompt with toggle was created */
  539. Xstatic Widget extoutwidget;
  540. Xstatic Widget extdiagwidget;
  541. X
  542. Xstatic Widget logshell = NULL;
  543. Xstatic Widget loglabel;
  544. Xstatic Widget logpane;
  545. Xstatic Widget logbox;
  546. Xstatic Widget logtext;
  547. X
  548. Xstatic short disp_prompt = 0;
  549. X
  550. Xcheck_confirm()
  551. X{
  552. X    return disp_prompt;
  553. X}
  554. X
  555. Xcheck_prompt()
  556. X{
  557. X    return disp_prompt;
  558. X}
  559. X
  560. X
  561. X
  562. X/* ARGSUSED */
  563. Xchange_sensitive(w, value)
  564. XWidget w;
  565. XBoolean value;
  566. X{
  567. X    XtSetSensitive(listbutton, value);
  568. X    XtSetSensitive(editbutton, value);
  569. X    XtSetSensitive(parentdirbutton, value);
  570. X    XtSetSensitive(renamebutton, value);
  571. X    XtSetSensitive(deletebutton, value);
  572. X    XtSetSensitive(shellbutton, value);
  573. X    XtSetSensitive(copybutton, value);
  574. X    XtSetSensitive(grepbutton, value);
  575. X    XtSetSensitive(grepeditbutton, value);
  576. X}
  577. X
  578. X/* ARGSUSED */
  579. Xconfirmyes(w, client_data, call_data)
  580. XWidget w;
  581. Xcaddr_t client_data, call_data;
  582. X{
  583. X    DialogData *data = (DialogData *)client_data;
  584. X
  585. X    destroyconfirm(data, (*data->yes));
  586. X}
  587. X
  588. X/* ARGSUSED */
  589. Xconfirmno(w, client_data, call_data)
  590. XWidget w;
  591. Xcaddr_t client_data, call_data;
  592. X{
  593. X    DialogData *data = (DialogData *)client_data;
  594. X
  595. X    destroyconfirm(data, (*data->no));
  596. X}
  597. X
  598. X/* ARGSUSED */
  599. Xconfirmcancel(w, client_data, call_data)
  600. XWidget w;
  601. Xcaddr_t client_data, call_data;
  602. X{
  603. X    DialogData *data = (DialogData *)client_data;
  604. X
  605. X    destroyconfirm(data, (*data->cancel));
  606. X}
  607. X
  608. X/* ARGSUSED */
  609. Xdestroyconfirm(data, func)
  610. XDialogData *data;
  611. Xint (*func)();
  612. X{
  613. X    change_sensitive(data->w, TRUE);
  614. X    XtPopdown(confirmshell);
  615. X    disp_prompt = 0;
  616. X
  617. X    extpromptwidget = NULL;
  618. X    XtDestroyWidget(confirmshell);
  619. X    confirmshell = NULL;
  620. X        /* I tried to reuse the previous popup shell for new
  621. X        dialog widgets; but after the first use the dialog buttons
  622. X        of my dialog widget were never displayed; it displayed
  623. X        only the label of the dialog box */
  624. X    
  625. X    func(data);
  626. X}
  627. X
  628. Xint move_popup(w, caller)
  629. XWidget w, caller;
  630. X{
  631. X    Dimension widthw, heightw;
  632. X    Position callerx, callery;
  633. X    int wx, wy;
  634. X    Window parentcaller, child;
  635. X    Screen *screen;
  636. X
  637. X    getsize(w, &widthw, &heightw);
  638. X    getpos(caller, &callerx, &callery);
  639. X    parentcaller = XtWindow(XtParent(caller));
  640. X    screen = XtScreen(caller);
  641. X    if (XTranslateCoordinates(curdisplay, parentcaller, screen->root, 
  642. X        (int)callerx, (int)callery, &wx, &wy, &child) == BadWindow) 
  643. X       return(-1);
  644. X    wx += 5; wy += 5;
  645. X
  646. X    if ( (wx + widthw) >= screen->width)
  647. X       wx = screen->width - widthw - 10;
  648. X    if ( (wy + heightw) >= screen->height)
  649. X       wy = screen->height - heightw - 10;
  650. X
  651. X    XtMoveWidget(w, (Position)wx, (Position)wy);
  652. X    return(0);
  653. X}
  654. X
  655. X/* ARGSUSED */
  656. Xint position_dialog(dialog, caller)
  657. XWidget dialog, caller;
  658. X{
  659. X    XtSetMappedWhenManaged(dialog, FALSE);
  660. X    XtRealizeWidget(dialog);
  661. X
  662. X    move_popup(dialog, caller);
  663. X
  664. X    change_sensitive(caller, FALSE);
  665. X    XtMapWidget(dialog);
  666. X    return(0);
  667. X}
  668. X
  669. X/* ARGSUSED */
  670. Xint create_confirm(data, str)
  671. XDialogData *data;
  672. Xchar *str;
  673. X{
  674. X    Arg args[1];
  675. X    Arg popargs[1];
  676. X
  677. X    if (disp_prompt) return(-1);
  678. X
  679. X    disp_prompt = 1;
  680. X    XtSetArg( popargs[0], XtNborderWidth, 2 );
  681. X
  682. X
  683. X    confirmshell = XtCreatePopupShell("popupshell",
  684. X               overrideShellWidgetClass,
  685. X            toplevel, popargs, XtNumber(popargs));
  686. X
  687. X    XtSetArg( args[0], XtNlabel, str );
  688. X    
  689. X    confirmwidget = XtCreateManagedWidget("confirm", dialogWidgetClass,
  690. X            confirmshell, args, XtNumber(args) );
  691. X    XtDialogAddButton(confirmwidget, "yes", confirmyes, (caddr_t)data);
  692. X    XtDialogAddButton(confirmwidget, "no", confirmno, (caddr_t)data);
  693. X    XtDialogAddButton(confirmwidget, "cancel", confirmcancel, (caddr_t)data);
  694. X
  695. X    if (position_dialog(confirmshell, data->w) == -1) {
  696. X       XtDestroyWidget(confirmshell);
  697. X       confirmwidget = NULL;
  698. X       confirmshell = NULL;
  699. X    }
  700. X    XtPopup(confirmshell, XtGrabNonexclusive);
  701. X    return(0);
  702. X}
  703. X
  704. X
  705. X/* ARGSUSED */
  706. Xpromptok(w, client_data, call_data)
  707. XWidget w;
  708. Xcaddr_t client_data, call_data;
  709. X{
  710. X    DialogData *data = (DialogData *)client_data;
  711. X    Arg togargs[1];
  712. X    XtState extstate;
  713. X
  714. X    data->answer = XtDialogGetValueString(confirmwidget);
  715. X    if (extpromptwidget != NULL) {
  716. X       XtSetArg(togargs[0], XtNstate, (XtArgVal)&extstate);
  717. X       XtGetValues(extdiagwidget, togargs, (Cardinal)1);
  718. X       data->diag = (Boolean)extstate;
  719. X
  720. X       XtSetArg(togargs[0], XtNstate, (XtArgVal)&extstate);
  721. X       XtGetValues(extoutwidget, togargs, (Cardinal)1);
  722. X       data->out = (Boolean)extstate;
  723. X    }
  724. X    else data->diag = data->out = FALSE;
  725. X
  726. X    destroyconfirm(data, (*data->yes));
  727. X}
  728. X
  729. X/* ARGSUSED */
  730. Xpromptcancel(w, client_data, call_data)
  731. XWidget w;
  732. Xcaddr_t client_data, call_data;
  733. X{
  734. X    DialogData *data = (DialogData *)client_data;
  735. X
  736. X    destroyconfirm(data, (*data->cancel));
  737. X}
  738. X
  739. X/* ARGSUSED */
  740. Xint create_prompt(data, str, defvalue)
  741. XDialogData *data;
  742. Xchar *str, *defvalue;
  743. X{
  744. X    Arg args[2];
  745. X    Arg popargs[1];
  746. X
  747. X    if (disp_prompt) return(-1);
  748. X    disp_prompt = 1;
  749. X
  750. X    XtSetArg( popargs[0], XtNborderWidth, 2 );
  751. X
  752. X/*    confirmshell = XtCreatePopupShell("promptshell",
  753. X               transientShellWidgetClass,
  754. X            toplevel, popargs, XtNumber(popargs));*/
  755. Xconfirmshell = XtCreatePopupShell("promptshell",
  756. X               topLevelShellWidgetClass,
  757. X            toplevel, popargs, XtNumber(popargs));
  758. X
  759. X    XtSetArg( args[0], XtNlabel, str );
  760. X    XtSetArg( args[1], XtNvalue, defvalue );
  761. X    
  762. X    confirmwidget = XtCreateManagedWidget("confirm", dialogWidgetClass,
  763. X            confirmshell, args, XtNumber(args) );
  764. X    XtDialogAddButton(confirmwidget, "ok", promptok, (caddr_t)data);
  765. X    XtDialogAddButton(confirmwidget, "cancel", promptcancel, (caddr_t)data);
  766. X
  767. X    if (position_dialog(confirmshell, data->w) == -1) {
  768. X       XtDestroyWidget(confirmshell);
  769. X       confirmwidget = NULL;
  770. X       confirmshell = NULL;
  771. X    }
  772. X    XtPopup(confirmshell, XtGrabNonexclusive);
  773. X    return(0);
  774. X}
  775. X
  776. X/* ARGSUSED */
  777. X/* creates a prompt window which contains a dialog widget as well as two
  778. X * toggle widgets defining if the output/diagnostics should be returned 
  779. X */
  780. Xint create_toggleprompt(data, str, defvalue)
  781. XDialogData *data;
  782. Xchar *str, *defvalue;
  783. X{
  784. X    Arg args[3];
  785. X    Arg popargs[1];
  786. X    Arg toggleargs[6];
  787. X
  788. X    if (disp_prompt) return(-1);
  789. X    disp_prompt = 1;
  790. X
  791. X    XtSetArg( popargs[0], XtNborderWidth, 2 );
  792. X
  793. X/*    confirmshell = XtCreatePopupShell("toggleshell",
  794. X               transientShellWidgetClass,
  795. X            toplevel, popargs, XtNumber(popargs));*/
  796. Xconfirmshell = XtCreatePopupShell("toggleshell",
  797. X               topLevelShellWidgetClass,
  798. X            toplevel, popargs, XtNumber(popargs));
  799. X    extpromptwidget = XtCreateManagedWidget("form", formWidgetClass,
  800. X            confirmshell, NULL, 0);
  801. X
  802. X    XtSetArg( args[0], XtNlabel, str );
  803. X    XtSetArg( args[1], XtNvalue, defvalue );
  804. X    XtSetArg( args[2], XtNborderWidth, 0 );
  805. X    
  806. X    confirmwidget = XtCreateManagedWidget("confirm", dialogWidgetClass,
  807. X            extpromptwidget, args, XtNumber(args) );
  808. X    XtDialogAddButton(confirmwidget, "ok", promptok, (caddr_t)data);
  809. X    XtDialogAddButton(confirmwidget, "cancel", promptcancel, (caddr_t)data);
  810. X
  811. X    /* create the two toggle buttons "Return Diagnostic"
  812. X     * and "Return Output" */ 
  813. X    XtSetArg( toggleargs[0], XtNfromVert, (XtArgVal)confirmwidget );
  814. X    XtSetArg( toggleargs[1], XtNfromHoriz, (XtArgVal)NULL);
  815. X    XtSetArg( toggleargs[2], XtNleft, (XtArgVal)XtChainLeft);
  816. X    XtSetArg( toggleargs[3], XtNright, (XtArgVal)XtChainLeft);
  817. X    XtSetArg( toggleargs[4], XtNstate, (XtArgVal)XtToggleOff );
  818. X    extoutwidget = XtCreateManagedWidget( "Return Output", 
  819. X            toggleWidgetClass, extpromptwidget, toggleargs,
  820. X            XtNumber(toggleargs) - 1 );
  821. X
  822. X    XtSetArg( toggleargs[0], XtNfromVert, (XtArgVal)confirmwidget );
  823. X    XtSetArg( toggleargs[1], XtNfromHoriz, (XtArgVal)extoutwidget );
  824. X    XtSetArg( toggleargs[2], XtNleft, (XtArgVal)XtChainLeft);
  825. X    XtSetArg( toggleargs[3], XtNright, (XtArgVal)XtChainLeft);
  826. X    XtSetArg( toggleargs[4], XtNstate, (XtArgVal)XtToggleOn);
  827. X    XtSetArg( toggleargs[5], XtNhorizDistance, (XtArgVal)20);
  828. X    extdiagwidget = XtCreateManagedWidget( "Return Diagnostic", 
  829. X            toggleWidgetClass, extpromptwidget, toggleargs,
  830. X            XtNumber(toggleargs) );
  831. X
  832. X    if (position_dialog(confirmshell, data->w) == -1) {
  833. X       XtDestroyWidget(confirmshell);
  834. X       confirmshell = NULL;
  835. X       extpromptwidget = NULL;
  836. X    }
  837. X    XtPopup(confirmshell, XtGrabNonexclusive);
  838. X    return(0);
  839. X}
  840. X
  841. X
  842. X/* ARGSUSED */
  843. Xlogquit()
  844. X{
  845. X    XtPopdown(logshell);
  846. X    XtSetSensitive(outer, TRUE);    
  847. X    return;
  848. X}
  849. X
  850. Xcreate_log()
  851. X{
  852. X    Arg popargs[1];
  853. X
  854. X    static Arg textargs[] = {
  855. X       { XtNfile, (XtArgVal)"/dev/null"},
  856. X       { XtNeditType, (XtArgVal)XttextRead },
  857. X       { XtNtextOptions, (XtArgVal)(wordBreak | scrollVertical) },
  858. X    };    
  859. X
  860. X    static Arg labelargs[] = {
  861. X       { XtNjustify, (XtArgVal)XtJustifyCenter },
  862. X       { XtNlabel,     NULL },
  863. X    };
  864. X
  865. X
  866. X    if (logshell != NULL)  return;
  867. X    XtSetArg( popargs[0], XtNborderWidth, 2 );
  868. X
  869. X/*    logshell = XtCreatePopupShell("logshell",
  870. X               transientShellWidgetClass,
  871. X            toplevel, popargs, XtNumber(popargs));*/
  872. Xlogshell = XtCreatePopupShell("logshell",
  873. X               topLevelShellWidgetClass,
  874. X            toplevel, popargs, XtNumber(popargs));
  875. X
  876. X    logpane = XtCreateManagedWidget("pane", vPanedWidgetClass, 
  877. X            logshell, (ArgList)NULL, 0);
  878. X    logbox = XtCreateManagedWidget("box", boxWidgetClass, 
  879. X            logpane, (ArgList)NULL,0);
  880. X    makeCommandButton(logbox, "Quit", logquit);
  881. X    loglabel = XtCreateManagedWidget("labelWindow",labelWidgetClass, 
  882. X        logpane, labelargs, XtNumber(labelargs)); 
  883. X    logtext = XtCreateManagedWidget("data", asciiDiskWidgetClass,
  884. X            logpane, textargs, XtNumber(textargs));
  885. X    
  886. X}
  887. X
  888. X/* ARGSUSED */
  889. Xlog_popup(label, file)
  890. Xchar *label, *file;
  891. X{
  892. X    XtTextSource old, new;
  893. X
  894. X    static Arg textargs[] = {
  895. X       { XtNfile, NULL},
  896. X       { XtNeditType, (XtArgVal)XttextRead },
  897. X       { XtNtextOptions, (XtArgVal)(wordBreak | scrollVertical) },
  898. X    };    
  899. X
  900. X    static Arg labelargs[] = {
  901. X       { XtNjustify, (XtArgVal)XtJustifyCenter },
  902. X       { XtNlabel,     NULL },
  903. X    };
  904. X
  905. X    textargs[0].value = (XtArgVal)file;
  906. X    labelargs[1].value = (XtArgVal)label;
  907. X    
  908. X
  909. X    if (logshell == NULL) create_log();
  910. X    old = XtTextGetSource(logtext);
  911. X    new = XtDiskSourceCreate(logtext, textargs, XtNumber(textargs));
  912. X    XtTextSetSource(logtext, new, 0);
  913. X    XtDiskSourceDestroy(old);
  914. X    XtSetValues(loglabel, labelargs, XtNumber(labelargs));
  915. X
  916. X    XtSetSensitive(outer, FALSE);    
  917. X    XtPopup(logshell, XtGrabExclusive);
  918. X    return(0);
  919. X}
  920. X
  921. END_OF_FILE
  922. if test 10444 -ne `wc -c <'popup.c'`; then
  923.     echo shar: \"'popup.c'\" unpacked with wrong size!
  924. fi
  925. # end of 'popup.c'
  926. fi
  927. if test -f 'scandir.c' -a "${1}" != "-c" ; then 
  928.   echo shar: Will not clobber existing file \"'scandir.c'\"
  929. else
  930. echo shar: Extracting \"'scandir.c'\" \(11063 characters\)
  931. sed "s/^X//" >'scandir.c' <<'END_OF_FILE'
  932. X/* Systems Sciences Laboratory, Webster Research Center */
  933. X
  934. Xstatic char *PROGRAM_information[] =
  935. X{
  936. X    "Copyright (c) 1988 Xerox Corporation.  All rights reserved.",
  937. X    "$Header$",
  938. X    "$Locker$"
  939. X}
  940. X;
  941. X
  942. X/*
  943. X * Copyright protection claimed includes all forms and matters of copyrightable
  944. X * material and information now allowed by statutory or judicial lay or
  945. X * herinafter granted, including without limitation, material generated from
  946. X * the software programs which are displayed on the screen such as icons,
  947. X * screen display looks, etc.
  948. X */
  949. X
  950. X#include "xfilebrowser.h"
  951. X
  952. X
  953. X/**************************
  954. X*   local data structures *
  955. X**************************/
  956. Xextern int getfiles();
  957. Xextern int my_alphasort();
  958. Xextern int filesizesort();
  959. Xextern int datesort();
  960. X
  961. Xstatic Widget listshell = NULL;
  962. Xstatic Widget sortoption;    /* option for sorting files */
  963. Xstatic Widget owneroption;    /* print owner or group */
  964. Xstatic Widget dottoggle;    /* should dot file be printed */
  965. X
  966. Xstatic Widget optioncaller;
  967. X
  968. Xstatic int currentsort = 1;
  969. Xstatic int currentdotfiles = 0;     /* don't print dot files */
  970. Xint currentid = 1;     /* 1 = print owner name; 2 = print group name */
  971. X
  972. Xstatic short direction = 1;
  973. X
  974. Xstatic short disp_option = 0;
  975. Xtypedef int (*intfunc)();
  976. X
  977. Xstatic intfunc sortfunc[] = {
  978. X    my_alphasort, filesizesort, datesort };
  979. X
  980. X
  981. Xcheck_option()
  982. X{
  983. X    return disp_option;
  984. X}
  985. X
  986. XXtState GetToggle(w)
  987. XWidget w;
  988. X{
  989. X    XtState toggle;
  990. X    Arg arglist[1];
  991. X
  992. X    XtSetArg(arglist[0], XtNstate, &toggle);
  993. X    XtGetValues(w, arglist, (Cardinal)1);
  994. X    return(toggle);
  995. X}
  996. X
  997. Xvoid SetToggle(w, value)
  998. XWidget w;
  999. XXtState value;
  1000. X{
  1001. X    Arg arglist[1];
  1002. X
  1003. X    XtSetArg(arglist[0], XtNstate, value);
  1004. X    XtSetValues(w, arglist, (Cardinal)1);
  1005. X}
  1006. X
  1007. Xvoid DoApply()
  1008. X{
  1009. X    currentsort = XtOptionGetSelection(sortoption);
  1010. X    currentid = XtOptionGetSelection(owneroption);
  1011. X    reset_ownercache();
  1012. X
  1013. X    if (GetToggle(dottoggle) == XtToggleOn) currentdotfiles = 1;
  1014. X    else currentdotfiles = 0;
  1015. X
  1016. X    disp_option = 0;
  1017. X    change_sensitive(optioncaller, TRUE);
  1018. X    XtPopdown(listshell);
  1019. X}
  1020. X
  1021. Xvoid DoCancel()
  1022. X{
  1023. X    XtState toggle;
  1024. X
  1025. X    /* reset the option dialog window */
  1026. X    if ( !(currentsort == XtOptionGetSelection(sortoption)) ) 
  1027. X        /* sorting was modified by user */
  1028. X       XtOptionSetSelection(sortoption, currentsort);
  1029. X
  1030. X    if ( !(currentid == XtOptionGetSelection(owneroption)) ) 
  1031. X        /* printing owner/group was modified by user */
  1032. X       XtOptionSetSelection(owneroption, currentid);
  1033. X
  1034. X        /* reset toggle switch for dot files */
  1035. X    toggle = GetToggle(dottoggle);
  1036. X    if (toggle == XtToggleOn && currentdotfiles == 0)
  1037. X       SetToggle(dottoggle, XtToggleOff);
  1038. X    else if (toggle == XtToggleOff && currentdotfiles == 1)
  1039. X       SetToggle(dottoggle, XtToggleOn);
  1040. X
  1041. X    disp_option = 0;
  1042. X    change_sensitive(optioncaller, TRUE);
  1043. X    XtPopdown(listshell);
  1044. X}
  1045. X
  1046. X
  1047. Xbuild_listoptions()
  1048. X{
  1049. X    Arg popargs[1];
  1050. X    Widget listpane, listrow1, listrow2, optform;
  1051. X
  1052. X    static Arg paneargs[] = {
  1053. X       { XtNallowResize, (XtArgVal)True },
  1054. X    };
  1055. X    static Arg optformlist[] = {
  1056. X       {XtNborderWidth, (XtArgVal)0 }
  1057. X    };
  1058. X
  1059. X    static Arg optionargs[] = { 
  1060. X       { XtNlabel, (XtArgVal)NULL },
  1061. X       { XtNorientation,(XtArgVal)XtorientVertical },
  1062. X       { XtNfromHoriz, (XtArgVal) NULL },
  1063. X       { XtNfromVert, (XtArgVal) NULL },
  1064. X       { XtNleft, (XtArgVal) XtChainLeft },
  1065. X       { XtNright, (XtArgVal) XtChainLeft },
  1066. X       { XtNtop, (XtArgVal) XtChainTop },
  1067. X       { XtNbottom, (XtArgVal) XtChainTop }
  1068. X
  1069. X    };
  1070. X    static XtCallbackRec callbackList[] = { {NULL, NULL}, {NULL, NULL} };
  1071. X    static Arg toggleargs[] = { 
  1072. X       { XtNlabel, (XtArgVal)NULL },
  1073. X       { XtNstate,(XtArgVal)XtToggleOff },
  1074. X       { XtNfromHoriz, (XtArgVal) NULL },
  1075. X       { XtNfromVert, (XtArgVal) NULL },
  1076. X       { XtNleft, (XtArgVal) XtChainLeft },
  1077. X       { XtNright, (XtArgVal) XtChainLeft },
  1078. X       { XtNtop, (XtArgVal) XtChainTop },
  1079. X       { XtNbottom, (XtArgVal) XtChainTop }
  1080. X
  1081. X    };
  1082. X
  1083. X    XtSetArg( popargs[0], XtNborderWidth, 2 );
  1084. X
  1085. X    listshell = XtCreatePopupShell("listshell",
  1086. X               overrideShellWidgetClass,
  1087. X            toplevel, popargs, XtNumber(popargs));
  1088. X
  1089. X    listpane = XtCreateManagedWidget( "listpaned", vPanedWidgetClass, 
  1090. X            listshell, paneargs , XtNumber(paneargs) );
  1091. X    listrow1 = XtCreateManagedWidget("listrow1", boxWidgetClass, 
  1092. X            listpane, NULL,0);
  1093. X    listrow2 = XtCreateManagedWidget("listrow2", boxWidgetClass, 
  1094. X            listpane, NULL,0);
  1095. X    makeCommandButton(listrow1, "Apply", DoApply);
  1096. X    makeCommandButton(listrow1, "Cancel", DoCancel);
  1097. X
  1098. X    optform = XtCreateManagedWidget("sorting",formWidgetClass, 
  1099. X        listrow2, optformlist, XtNumber(optformlist));
  1100. X
  1101. X        /* define option menu for sorting files */
  1102. X    optionargs[0].value = (XtArgVal)"Select Sorting Option:";
  1103. X    sortoption = XtCreateManagedWidget("sorting", optionWidgetClass, 
  1104. X        optform, optionargs, XtNumber(optionargs));
  1105. X    XtOptionAddOption(sortoption, "File Name", TRUE);
  1106. X    XtOptionAddOption(sortoption, "File Size", FALSE);
  1107. X    XtOptionAddOption(sortoption, "Date", FALSE);
  1108. X
  1109. X        /* define option menu for printing owner/group */
  1110. X    optionargs[0].value = (XtArgVal)"Print Owner/Group Name:";
  1111. X    optionargs[2].value = (XtArgVal)sortoption;
  1112. X    owneroption = XtCreateManagedWidget("owner", optionWidgetClass, 
  1113. X        optform, optionargs, XtNumber(optionargs));
  1114. X    XtOptionAddOption(owneroption, "Owner Name", TRUE);
  1115. X    XtOptionAddOption(owneroption, "Group name", FALSE);
  1116. X
  1117. X        /* define toggle for printing . files */
  1118. X    toggleargs[0].value = (XtArgVal)"Print Dot Files";
  1119. X    toggleargs[3].value = (XtArgVal)sortoption;
  1120. X    dottoggle = XtCreateManagedWidget("owner", toggleWidgetClass, 
  1121. X        optform, toggleargs, XtNumber(toggleargs));
  1122. X
  1123. X    XtSetMappedWhenManaged(listshell, FALSE);
  1124. X    XtRealizeWidget(listshell);
  1125. X}
  1126. X
  1127. Xdisplay_listoptions(caller)
  1128. XWidget caller;
  1129. X{
  1130. X    if (listshell == NULL) {
  1131. X       build_listoptions();
  1132. X       optioncaller = caller;
  1133. X    }
  1134. X
  1135. X    disp_option = 1;
  1136. X    move_popup(listshell, caller);
  1137. X    change_sensitive(caller, FALSE);
  1138. X    XtMapWidget(listshell);
  1139. X    XtPopup(listshell, XtGrabNonexclusive);
  1140. X}
  1141. X
  1142. X/*********************************
  1143. X* routines for scanning the directory *
  1144. X***********************************/
  1145. X
  1146. Xfree_direct(dfiles, numdfiles)
  1147. Xstruct afile ***dfiles;
  1148. Xint *numdfiles;
  1149. X{
  1150. X    register int i;
  1151. X    register struct afile **listfiles = *dfiles;
  1152. X
  1153. X    if (listfiles != (struct afile **)NULL) {
  1154. X       for (i = 0; i < *numdfiles; i++) free(listfiles[i]);
  1155. X       *numdfiles = 0;
  1156. X       free(listfiles);
  1157. X       *dfiles = (struct afile **)NULL;
  1158. X    }
  1159. X}
  1160. X
  1161. X
  1162. X/* ARGSUSED */
  1163. Xint prepare_list(dirname, dir, dfiles, numdfiles, nameprepend)
  1164. Xchar * dirname;
  1165. Xshort dir;
  1166. Xstruct afile ***dfiles;
  1167. Xint *numdfiles;
  1168. Xchar *nameprepend;
  1169. X{
  1170. X    if (dir != 0) direction = dir;
  1171. X    if ( (*numdfiles = my_scandir(dirname, dfiles, getfiles,
  1172. X             sortfunc[currentsort-1], nameprepend) ) < 0) {
  1173. X       disp_message("\nList: current directory?");
  1174. X       return (-1);
  1175. X    }
  1176. X    return(0);
  1177. X}
  1178. X
  1179. X/* ARGSUSED */
  1180. Xgetfiles(dp)
  1181. Xregister struct direct *dp;
  1182. X{
  1183. X    if (!currentdotfiles && (dp->d_name)[0] == '.') return 0;
  1184. X    if (! strcmp(dp->d_name, ".") ||  ! strcmp(dp->d_name, "..")) return 0;
  1185. X    if (re_exec(dp->d_name)) return 1;
  1186. X    else return 0;
  1187. X}
  1188. X
  1189. X/* ARGSUSED */
  1190. Xmy_scandir(dirname, namelist, select, dcomp, nameprepend)
  1191. Xchar *dirname;
  1192. Xstruct afile *(*namelist[]);
  1193. Xint (*select)(), (*dcomp)();
  1194. Xchar *nameprepend;
  1195. X{
  1196. X    register struct direct *d;
  1197. X    register struct afile *p, **names;
  1198. X    register int j;
  1199. X    int nitems, cc;
  1200. X    register char *cp1, *cp2;
  1201. X    struct stat stb;
  1202. X    struct stat fbuf;
  1203. X    u_short elemlength;
  1204. X    long arraysz;
  1205. X    DIR *dirp;
  1206. X    char path[MAXNAME + 1];
  1207. X    int prelength = (nameprepend == NULL) ? 0 : (strlen(nameprepend)+1);
  1208. X
  1209. X    if ((dirp = opendir(dirname)) == NULL)
  1210. X        return(-1);
  1211. X    if (fstat(dirp->dd_fd, &stb) < 0)
  1212. X        return(-1);
  1213. X
  1214. X    /*
  1215. X     * estimate the array size by taking the size of the directory file
  1216. X     * and dividing it by a multiple of the minimum size entry. 
  1217. X     */
  1218. X    arraysz = (stb.st_size / 24);
  1219. X    names = (struct afile **)XtMalloc(arraysz * sizeof(struct afile *));
  1220. X
  1221. X    nitems = 0;
  1222. X    while ((d = readdir(dirp)) != NULL) {
  1223. X       if (select != NULL && !(*select)(d))
  1224. X        continue;    /* just selected names */
  1225. X        /*
  1226. X         * Make a minimum size copy of the data
  1227. X         */
  1228. X       elemlength = MYDIRSIZ(d, prelength);
  1229. X       p = (struct afile *)XtMalloc(elemlength);
  1230. X       p->d_marked = 0;
  1231. X       p->d_ino = d->d_ino;
  1232. X       p->d_reclen = elemlength;
  1233. X       p->d_namlen = d->d_namlen + prelength;
  1234. X       sprintf(path, "%s/%s", dirname, d->d_name);
  1235. X
  1236. X       if (nameprepend != (char *)NULL) {
  1237. X           for (cp1 = p->d_name, cp2 = nameprepend; 
  1238. X                        *cp1++ = *cp2++; );
  1239. X        *(cp1 - 1) = '/';
  1240. X           for (cp2 = d->d_name; *cp1++ = *cp2++; );
  1241. X           if (stat(path, &fbuf) ) return(-1);
  1242. X            /* no stats file is found */
  1243. X       }
  1244. X       else {
  1245. X        for (cp1 = p->d_name, cp2 = d->d_name; *cp1++ = *cp2++; ); 
  1246. X
  1247. X           if (lstat(path, &fbuf) ) {
  1248. X           disp_message("\nList: stats file for %s", d->d_name);
  1249. X           return(-1);
  1250. X           }
  1251. X       }
  1252. X
  1253. X       p->d_size = fbuf.st_size;
  1254. X       p->d_nlink = fbuf.st_nlink;
  1255. X
  1256. X       switch(fbuf.st_mode & S_IFMT) {
  1257. X       case S_IFDIR:  p->d_type = 'd'; break;
  1258. X       case S_IFBLK:  p->d_type = 'b'; p->d_size = fbuf.st_rdev; break;
  1259. X       case S_IFCHR:  p->d_type = 'c'; p->d_size = fbuf.st_rdev; break;
  1260. X       case S_IFSOCK: p->d_type = 's'; p->d_size = 0; break;
  1261. X       case S_IFLNK:  p->d_type = 'l'; break;
  1262. X       default:       p->d_type = '-'; break;
  1263. X       }
  1264. X
  1265. X       j = 0;
  1266. X       if (fbuf.st_mode & 0400) 
  1267. X        p->d_access[j++] = 'r'; else p->d_access[j++] = '-';
  1268. X       if (fbuf.st_mode & 0200) 
  1269. X        p->d_access[j++] = 'w'; else p->d_access[j++] = '-';
  1270. X       if (fbuf.st_mode & 0100) 
  1271. X        p->d_access[j++] = 'x'; else p->d_access[j++] = '-';
  1272. X       if (fbuf.st_mode & 0040) 
  1273. X        p->d_access[j++] = 'r'; else p->d_access[j++] = '-';
  1274. X       if (fbuf.st_mode & 0020) 
  1275. X        p->d_access[j++] = 'w'; else p->d_access[j++] = '-';
  1276. X       if (fbuf.st_mode & 0010) 
  1277. X        p->d_access[j++] = 'x'; else p->d_access[j++] = '-';
  1278. X       if (fbuf.st_mode & 0004) 
  1279. X        p->d_access[j++] = 'r'; else p->d_access[j++] = '-';
  1280. X       if (fbuf.st_mode & 0002) 
  1281. X        p->d_access[j++] = 'w'; else p->d_access[j++] = '-';
  1282. X       if (fbuf.st_mode & 0001) 
  1283. X        p->d_access[j++] = 'x'; else p->d_access[j++] = '-';
  1284. X       p->d_access[j] = '\0';
  1285. X
  1286. X       p->d_ctime = fbuf.st_ctime;
  1287. X       p->d_uid = fbuf.st_uid;
  1288. X       p->d_gid = fbuf.st_gid;
  1289. X
  1290. X        /*
  1291. X         * Check to make sure the array has space left and
  1292. X         * realloc the maximum size.
  1293. X         */
  1294. X       if (++nitems >= arraysz) {
  1295. X        if (fstat(dirp->dd_fd, &stb) < 0)
  1296. X                return(-1);    /* just might have grown */
  1297. X        arraysz = stb.st_size / 12;
  1298. X        names = (struct afile **)XtRealloc((char *)names,
  1299. X                arraysz * sizeof(struct afile *));
  1300. X       }
  1301. X       names[nitems-1] = p;
  1302. X    }
  1303. X    closedir(dirp);
  1304. X    if (nitems && dcomp != NULL)
  1305. X        qsort(names, nitems, sizeof(struct afile *), dcomp);
  1306. X    *namelist = names;
  1307. X    return(nitems);
  1308. X}
  1309. X
  1310. X/*
  1311. X * Alphabetic order comparison routine
  1312. X */
  1313. X/* ARGSUSED */
  1314. Xint my_alphasort(d1, d2)
  1315. X    struct afile **d1, **d2;
  1316. X{
  1317. X    return(direction * strcmp((*d1)->d_name, (*d2)->d_name));
  1318. X}
  1319. X
  1320. X/*
  1321. X * file size order comparison routine
  1322. X */
  1323. X/* ARGSUSED */
  1324. Xint filesizesort(d1, d2)
  1325. X    struct afile **d1, **d2;
  1326. X{
  1327. X    int i;
  1328. X
  1329. X    if ( (*d1)->d_size < (*d2)->d_size ) i = (int)direction * (-1);
  1330. X    else if ( (*d1)->d_size > (*d2)->d_size ) i = (int)direction;
  1331. X    else i = 0;
  1332. X    return(i);
  1333. X}
  1334. X
  1335. X/*
  1336. X * file date order comparison routine
  1337. X */
  1338. X/* ARGSUSED */
  1339. Xint datesort(d1, d2)
  1340. X    struct afile **d1, **d2;
  1341. X{
  1342. X    int i;
  1343. X
  1344. X    if ( (*d1)->d_ctime < (*d2)->d_ctime ) i = (int)direction * (-1);
  1345. X    else if ( (*d1)->d_ctime > (*d2)->d_ctime ) i = (int)direction;
  1346. X    else i = 0;
  1347. X    return(i);
  1348. X}
  1349. END_OF_FILE
  1350. if test 11063 -ne `wc -c <'scandir.c'`; then
  1351.     echo shar: \"'scandir.c'\" unpacked with wrong size!
  1352. fi
  1353. # end of 'scandir.c'
  1354. fi
  1355. if test -f 'toggle.c' -a "${1}" != "-c" ; then 
  1356.   echo shar: Will not clobber existing file \"'toggle.c'\"
  1357. else
  1358. echo shar: Extracting \"'toggle.c'\" \(8583 characters\)
  1359. sed "s/^X//" >'toggle.c' <<'END_OF_FILE'
  1360. X/* Systems Sciences Laboratory, Webster Research Center */
  1361. X
  1362. Xstatic char *PROGRAM_information[] =
  1363. X{
  1364. X    "Copyright (c) 1988 Xerox Corporation.  All rights reserved.",
  1365. X    "$Header$",
  1366. X    "$Locker$"
  1367. X}
  1368. X;
  1369. X
  1370. X/*
  1371. X * Copyright protection claimed includes all forms and matters of copyrightable
  1372. X * material and information now allowed by statutory or judicial lay or
  1373. X * herinafter granted, including without limitation, material generated from
  1374. X * the software programs which are displayed on the screen such as icons,
  1375. X * screen display looks, etc.
  1376. X */
  1377. X
  1378. X
  1379. X/*
  1380. X * toggle.c - Toggle widget
  1381. X *
  1382. X */
  1383. X
  1384. X
  1385. X#include <stdio.h>
  1386. X#include <X11/Xos.h>
  1387. X#include <ctype.h>
  1388. X#include <X11/StringDefs.h>
  1389. X#include <X11/IntrinsicP.h>
  1390. X#include <X11/XawMisc.h>
  1391. X#include "toggleP.h"
  1392. X
  1393. X/* Private Data */
  1394. X
  1395. Xextern void Initialize();
  1396. Xextern Boolean SetValues();
  1397. Xextern void Toggle();
  1398. Xextern void Unhighlight();
  1399. Xextern void Highlight();
  1400. Xextern void Notify();
  1401. Xextern void ClassInitialize();
  1402. X
  1403. X
  1404. Xstatic char toggleTranslations[] =
  1405. X    "<Btn1Up>:        toggle() notify()\n\
  1406. X     <EnterWindow>:    highlight() \n\
  1407. X     <LeaveWindow>:    unhighlight()";
  1408. X
  1409. X
  1410. X#define offset(field) XtOffset(ToggleWidget, field)
  1411. Xstatic Dimension defwidth = 0;
  1412. Xstatic XtState defState = XtToggleOff;
  1413. X
  1414. Xstatic XtResource resources[] = { 
  1415. X   {XtNcursor, XtCCursor, XtRCursor, sizeof(Cursor),
  1416. X      offset(simple.cursor), XtRString, "hand2"},
  1417. X   {XtNborderWidth, XtCBorderWidth, XtRDimension, sizeof(Dimension),
  1418. X      offset(core.border_width), XtRDimension, (caddr_t)&defwidth},
  1419. X   {XtNstate, XtCState, XtRState, sizeof(XtState), 
  1420. X      offset(toggle.state), XtRState, (caddr_t)&defState},
  1421. X};
  1422. X#undef offset
  1423. X
  1424. Xstatic XtActionsRec toggleactionsList[] =
  1425. X{
  1426. X  {"toggle",        Toggle},
  1427. X  {"notify",        Notify},
  1428. X  {"highlight",    Highlight},
  1429. X  {"unhighlight",    Unhighlight},
  1430. X};
  1431. X
  1432. X  /* ...ClassData must be initialized at compile time.  Must
  1433. X     initialize all substructures.  (Actually, last two here
  1434. X     need not be initialized since not used.)
  1435. X  */
  1436. XToggleClassRec toggleClassRec = {
  1437. X  {
  1438. X    (WidgetClass) &commandClassRec,    /* superclass          */    
  1439. X    "Toggle",                /* class_name          */
  1440. X    sizeof(ToggleRec),            /* size              */
  1441. X    ClassInitialize,            /* class_initialize      */
  1442. X    NULL,                /* class_part_initialize  */
  1443. X    FALSE,                /* class_inited          */
  1444. X    Initialize,            /* initialize          */
  1445. X    NULL,                /* initialize_hook      */
  1446. X    XtInheritRealize,            /* realize          */
  1447. X    toggleactionsList,            /* actions          */
  1448. X    XtNumber(toggleactionsList),    /* num_actions          */
  1449. X    resources,                /* resources          */
  1450. X    XtNumber(resources),        /* resource_count      */
  1451. X    NULLQUARK,                /* xrm_class          */
  1452. X    FALSE,                /* compress_motion      */
  1453. X    TRUE,                /* compress_exposure      */
  1454. X    TRUE,                /* compress_enterleave    */
  1455. X    FALSE,                /* visible_interest      */
  1456. X    NULL,                /* destroy          */
  1457. X    XtInheritResize,            /* resize          */
  1458. X    XtInheritExpose,            /* expose          */
  1459. X    SetValues,                /* set_values          */
  1460. X    NULL,                /* set_values_hook      */
  1461. X    XtInheritSetValuesAlmost,        /* set_values_almost      */
  1462. X    NULL,                /* get_values_hook      */
  1463. X    NULL,                /* accept_focus          */
  1464. X    XtVersion,                /* version          */
  1465. X    NULL,                /* callback_private      */
  1466. X    toggleTranslations,        /* tm_table          */
  1467. X    NULL,                /* query_geometry      */
  1468. X    XtInheritDisplayAccelerator,    /* display_accelerator      */
  1469. X    NULL,                /* extension            */
  1470. X  },  /* CoreClass fields initialization */
  1471. X  {
  1472. X    0,                                     /* field not used    */
  1473. X  },  /* LabelClass fields initialization */
  1474. X  {
  1475. X    0,                                     /* field not used    */
  1476. X  },  /* CommandClass fields initialization */
  1477. X  {
  1478. X    0,                                     /* field not used    */
  1479. X  },  /* ToggleClass fields initialization */
  1480. X};
  1481. X
  1482. X  /* for public consumption */
  1483. XWidgetClass toggleWidgetClass = (WidgetClass) &toggleClassRec;
  1484. X
  1485. X/****************************************************************
  1486. X *
  1487. X * Private Procedures
  1488. X *
  1489. X ****************************************************************/
  1490. X
  1491. Xstatic void CvtStringToState();
  1492. X
  1493. Xstatic XrmQuark    XrmQEtoggleon;
  1494. Xstatic XrmQuark    XrmQEtoggleoff;
  1495. X
  1496. Xstatic void ClassInitialize()
  1497. X{
  1498. X
  1499. X    XrmQEtoggleon   = XrmStringToQuark("toggleon");
  1500. X    XrmQEtoggleoff = XrmStringToQuark("toggleoff");
  1501. X
  1502. X    XtAddConverter( XtRString, XtRState, CvtStringToState, NULL, 0 );
  1503. X} /* ClassInitialize */
  1504. X
  1505. X/* ARGSUSED */
  1506. Xstatic void CvtStringToState(args, num_args, fromVal, toVal)
  1507. XXrmValuePtr *args;        /* unused */
  1508. XCardinal    *num_args;    /* unused */
  1509. XXrmValuePtr fromVal;
  1510. XXrmValuePtr toVal;
  1511. X{
  1512. X    static XtState e;
  1513. X    XrmQuark q;
  1514. X    char *s = (char *) fromVal->addr;
  1515. X    char lowerName[1000];
  1516. X    int i;
  1517. X
  1518. X    if (s == NULL) return;
  1519. X
  1520. X    for (i=0; i<=strlen(s); i++) {
  1521. X        char c = s[i];
  1522. X    lowerName[i] = isupper(c) ? (char) tolower(c) : c;
  1523. X    }
  1524. X
  1525. X    q = XrmStringToQuark(lowerName);
  1526. X
  1527. X    toVal->size = sizeof(XtState);
  1528. X    toVal->addr = (caddr_t) &e;
  1529. X
  1530. X    if (q == XrmQEtoggleon)  { e = XtToggleOn; return; }
  1531. X    if (q == XrmQEtoggleoff) { e = XtToggleOff; return; }
  1532. X
  1533. X    toVal->size = 0;
  1534. X    toVal->addr = NULL;
  1535. X};
  1536. X
  1537. X/* ARGSUSED */
  1538. Xstatic void Initialize(request, new)
  1539. XWidget request, new;
  1540. X{
  1541. X    ToggleWidget tw = (ToggleWidget)new;
  1542. X
  1543. X    tw->command.set = (int)tw->toggle.state;
  1544. X    if (tw->toggle.state == XtToggleOn)
  1545. X       tw->label.normal_GC = tw->command.inverse_GC;
  1546. X} 
  1547. X
  1548. Xstatic Region HighlightRegion(cbw)
  1549. X    ToggleWidget cbw;
  1550. X{
  1551. X    static Region outerRegion = NULL, innerRegion, emptyRegion;
  1552. X    XRectangle rect;
  1553. X
  1554. X    if (outerRegion == NULL) {
  1555. X    /* save time by allocating scratch regions only once. */
  1556. X    outerRegion = XCreateRegion();
  1557. X    innerRegion = XCreateRegion();
  1558. X    emptyRegion = XCreateRegion();
  1559. X    }
  1560. X
  1561. X    rect.x = rect.y = 0;
  1562. X    rect.width = cbw->core.width;
  1563. X    rect.height = cbw->core.height;
  1564. X    XUnionRectWithRegion( &rect, emptyRegion, outerRegion );
  1565. X    rect.x = rect.y =  cbw->command.highlight_thickness;
  1566. X    rect.width -= cbw->command.highlight_thickness * 2;
  1567. X    rect.height -= cbw->command.highlight_thickness * 2;
  1568. X    XUnionRectWithRegion( &rect, emptyRegion, innerRegion );
  1569. X    XSubtractRegion( outerRegion, innerRegion, outerRegion );
  1570. X    return outerRegion;
  1571. X}
  1572. X/***************************
  1573. X*
  1574. X*  Action Procedures
  1575. X*
  1576. X***************************/
  1577. X
  1578. X/* ARGSUSED */
  1579. Xstatic void Toggle(w,event,params,num_params)
  1580. X     Widget w;
  1581. X     XEvent *event;
  1582. X     String *params;        /* unused */
  1583. X     Cardinal *num_params;    /* unused */
  1584. X{
  1585. X    ToggleWidget tw = (ToggleWidget)w;
  1586. X
  1587. X    if (tw->toggle.state == XtToggleOn) {
  1588. X       tw->toggle.state = XtToggleOff;
  1589. X       tw->command.set = FALSE;
  1590. X       tw->label.normal_GC = tw->command.normal_GC;
  1591. X       tw->command.highlighted = TRUE; 
  1592. X    }
  1593. X    else {
  1594. X       tw->toggle.state = XtToggleOn;
  1595. X       tw->command.set = TRUE;
  1596. X       tw->label.normal_GC = tw->command.inverse_GC;
  1597. X    }
  1598. XXClearArea(XtDisplay(w), XtWindow(w), 0, 0, 0, 0, TRUE);
  1599. X/*    (tw->core.widget_class->core_class.expose)(w, event, NULL);*/
  1600. X}
  1601. X
  1602. X/* ARGSUSED */
  1603. Xstatic void Notify(w,event,params,num_params)
  1604. XWidget w;
  1605. XXEvent *event;
  1606. XString *params;        /* unused */
  1607. XCardinal *num_params;        /* unused */
  1608. X{
  1609. X    ToggleWidget tw = (ToggleWidget)w;
  1610. X    if (tw->command.callbacks != NULL)
  1611. X         XtCallCallbacks(w, XtNcallback, tw->toggle.state);
  1612. X    (tw->core.widget_class->core_class.expose)(w, event, NULL);
  1613. X}
  1614. X
  1615. X/* ARGSUSED */
  1616. Xstatic void Highlight(w,event,params,num_params)
  1617. XWidget w;
  1618. XXEvent *event;
  1619. XString *params;        /* unused */
  1620. XCardinal *num_params;    /* unused */
  1621. X{
  1622. X    ToggleWidget tw = (ToggleWidget)w;
  1623. X
  1624. X    if (tw->command.set == FALSE)  {
  1625. X       tw->command.highlighted = TRUE;
  1626. X       (tw->core.widget_class->core_class.expose)(w, event,
  1627. X         HighlightRegion(tw));
  1628. X    }
  1629. X}
  1630. X
  1631. X/* ARGSUSED */
  1632. Xstatic void Unhighlight(w,event,params,num_params)
  1633. XWidget w;
  1634. XXEvent *event;
  1635. XString *params;        /* unused */
  1636. XCardinal *num_params;    /* unused */
  1637. X{
  1638. X    ToggleWidget tw = (ToggleWidget)w;
  1639. X
  1640. X    tw->command.highlighted = FALSE;
  1641. X    if (tw->command.set == FALSE) {
  1642. X       (tw->core.widget_class->core_class.expose)(w, event,
  1643. X           HighlightRegion(tw));
  1644. X    }
  1645. X}
  1646. X
  1647. X
  1648. X/*
  1649. X * Set specified arguments into widget
  1650. X */
  1651. X/* ARGSUSED */
  1652. Xstatic Boolean SetValues (current, request, new)
  1653. XWidget current, request, new;
  1654. X{
  1655. X    ToggleWidget tw = (ToggleWidget)current;
  1656. X    ToggleWidget tnew = (ToggleWidget)new;
  1657. X
  1658. X    if (tnew->toggle.state != tw->toggle.state) {
  1659. X        /* the resource XtNstate is modified */
  1660. X       tnew->command.set = !(tw->command.set);
  1661. X    }
  1662. X    else if (tnew->core.sensitive != tw->core.sensitive  
  1663. X        && tnew->core.sensitive) {
  1664. X        /* the resource XtNsensitive is modified */
  1665. X       tnew->command.set = (Boolean)tw->toggle.state;
  1666. X    }
  1667. X    else return FALSE;
  1668. X
  1669. X    if (tnew->toggle.state == XtToggleOn)
  1670. X       tnew->label.normal_GC = tnew->command.inverse_GC;
  1671. X    else
  1672. X       tnew->label.normal_GC = tnew->command.normal_GC;
  1673. X
  1674. X    return TRUE;
  1675. X}
  1676. END_OF_FILE
  1677. if test 8583 -ne `wc -c <'toggle.c'`; then
  1678.     echo shar: \"'toggle.c'\" unpacked with wrong size!
  1679. fi
  1680. # end of 'toggle.c'
  1681. fi
  1682. if test -f 'xfilebrowser.c' -a "${1}" != "-c" ; then 
  1683.   echo shar: Will not clobber existing file \"'xfilebrowser.c'\"
  1684. else
  1685. echo shar: Extracting \"'xfilebrowser.c'\" \(8220 characters\)
  1686. sed "s/^X//" >'xfilebrowser.c' <<'END_OF_FILE'
  1687. X/* Systems Sciences Laboratory, Webster Research Center */
  1688. X
  1689. Xstatic char *PROGRAM_information[] =
  1690. X{
  1691. X    "Copyright (c) 1988 Xerox Corporation.  All rights reserved.",
  1692. X    "$Header$",
  1693. X    "$Locker$"
  1694. X}
  1695. X;
  1696. X
  1697. X/*
  1698. X * Copyright protection claimed includes all forms and matters of copyrightable
  1699. X * material and information now allowed by statutory or judicial lay or
  1700. X * herinafter granted, including without limitation, material generated from
  1701. X * the software programs which are displayed on the screen such as icons,
  1702. X * screen display looks, etc.
  1703. X */
  1704. X
  1705. X#include "xfilebrowser.h"
  1706. X#include "xbrowser.icon"
  1707. X
  1708. X
  1709. Xchar *filepattern;
  1710. Xchar *searchpattern;
  1711. Xchar *curdirectory;
  1712. Xchar *oldpattern;
  1713. Xchar *cmdline;
  1714. X
  1715. Xstruct afile **files = NULL;
  1716. XSearchElement **hitfiles = NULL;
  1717. Xint numfiles = 0;
  1718. Xint numhitfiles = 0;
  1719. Xint allowedit = 0;
  1720. X
  1721. XWidget toplevel;
  1722. XWidget outer;
  1723. XWidget Row1;
  1724. XWidget Row2;
  1725. XWidget Row3;
  1726. X
  1727. XWidget messwidget;    /* text widget for displaying messages */
  1728. XWidget dirwidget;    /* label widget for current directory */
  1729. XWidget listwidget;    /* text widget for directory listing */
  1730. XWidget grepwidget;    /* text widget for searched files */
  1731. X
  1732. XWidget quitbutton;    /* command button for quit */
  1733. XWidget listbutton;    /* command button for list */
  1734. XWidget editbutton;    /* command button for edit file selected
  1735. X            in directory listing */
  1736. XWidget parentdirbutton;    /* command button for selecting
  1737. X                parent directory */
  1738. XWidget shellbutton;    /* command button for invoking shell */
  1739. XWidget copybutton;    /* command button for invoking copy */
  1740. XWidget renamebutton;    /* command button for invoking rename */
  1741. XWidget deletebutton;    /* command button for invoking delete on files */
  1742. X
  1743. XWidget fpatwindow;    /* string box for providing the file pattern
  1744. X            used to list directories */
  1745. X
  1746. XWidget grepbutton;    /* command button for invoking grep on files */
  1747. XWidget grepwindow;    /* string box to specify the grep search pattern */
  1748. XWidget grepeditbutton;    /* command button for edit file selected
  1749. X            in list of searched files */
  1750. X
  1751. XDisplay *curdisplay;
  1752. XXtTextSource messsource, listsource, grepsource;
  1753. X
  1754. Xint viewEdit;
  1755. X
  1756. Xstatic XtResource resources[] = {
  1757. X   {"viewEdit", "ViewEdit", XtRBoolean, sizeof(int),
  1758. X         (Cardinal)&viewEdit, XtRString, "False"}
  1759. X};
  1760. X
  1761. XmakeButtonsAndBoxes()
  1762. X{
  1763. X    Cursor hand;
  1764. X    static XtTextSelectType listselect[] = {
  1765. X        XtselectLine, XtselectAll, XtselectNull, XtselectNull};
  1766. X
  1767. X    static Arg paneargs[] = {
  1768. X       { XtNallowResize, (XtArgVal)True },
  1769. X    };
  1770. X    static Arg ListArgs[] = {
  1771. X       { XtNtextSource, NULL },
  1772. X       { XtNtextSink, NULL },
  1773. X         { XtNcursor, NULL },
  1774. X       { XtNtextOptions , 
  1775. X        (XtArgVal)(scrollVertical | scrollHorizontal | resizeWidth) },
  1776. X       { XtNselectTypes, (XtArgVal)listselect }, 
  1777. X    };
  1778. X    static Arg MessArgs[] = {
  1779. X       { XtNtextSource, NULL },
  1780. X       { XtNtextSink, NULL },
  1781. X       { XtNtextOptions, (XtArgVal)(scrollVertical | wordBreak) },
  1782. X    };
  1783. X    static Arg labelArgs[] = {
  1784. X       { XtNjustify, (XtArgVal)XtJustifyCenter },
  1785. X       { XtNlabel,     NULL },
  1786. X    };
  1787. X    static Arg grepArgs[] = {
  1788. X       { XtNtextSource, NULL },
  1789. X       { XtNtextSink, NULL },
  1790. X         { XtNcursor, NULL },
  1791. X       { XtNtextOptions , 
  1792. X        (XtArgVal)(scrollVertical | scrollHorizontal | resizeWidth) },
  1793. X       { XtNselectTypes, (XtArgVal)listselect }, 
  1794. X    }; 
  1795. X
  1796. X
  1797. X    outer = XtCreateManagedWidget( "vpaned", vPanedWidgetClass, toplevel,
  1798. X                                  paneargs , XtNumber(paneargs) );
  1799. X    XtPanedSetRefigureMode(outer, FALSE);
  1800. X
  1801. X    /* create first row */
  1802. X    Row1 = XtCreateManagedWidget("row1", boxWidgetClass, outer, NULL,0);
  1803. X    quitbutton     = makeCommandButton(Row1, "Quit", DoQuit);
  1804. X    listbutton     = makeCommandButton(Row1, "List", DoList);
  1805. X    ModCommand_Init(listbutton);
  1806. X
  1807. X    editbutton     = makeCommandButton(Row1, "View/Edit", DoEdit);
  1808. X    ModCommand_Init(editbutton);
  1809. X    parentdirbutton = makeCommandButton(Row1, "Parent", DoParent);
  1810. X    ModCommand_Init(parentdirbutton);
  1811. X    shellbutton     = makeCommandButton(Row1, "Shell", DoShell);
  1812. X    ModCommand_Init(shellbutton);
  1813. X
  1814. X    copybutton     = makeCommandButton(Row1, "Copy", DoCopy);
  1815. X    renamebutton     = makeCommandButton(Row1, "Move", DoRename);
  1816. X    deletebutton     = makeCommandButton(Row1, "Delete", DoDelete);
  1817. X
  1818. X    /* create second row */
  1819. X    Row2 = XtCreateManagedWidget("row2", boxWidgetClass, outer, NULL,0);
  1820. X    fpatwindow = makeStringBox(Row2, filepattern, 254);
  1821. X
  1822. X    /* create label for current directory */
  1823. X    labelArgs[1].value = (XtArgVal)curdirectory;
  1824. X    dirwidget = XtCreateManagedWidget("labelWindow",labelWidgetClass, 
  1825. X        outer, labelArgs, XtNumber(labelArgs)); 
  1826. X    XtPanedSetMinMax((Widget)dirwidget, 14, 14);
  1827. X
  1828. X    /* create message window */
  1829. X    messsource = TCreateApAsSource();
  1830. X    MessArgs[0].value = (XtArgVal)messsource;
  1831. X    MessArgs[1].value = (XtArgVal)XtAsciiSinkCreate(outer, NULL, 0);
  1832. X    messwidget =  XtCreateManagedWidget("messageWindow",
  1833. X        textWidgetClass, outer, MessArgs, XtNumber(MessArgs));
  1834. X    XtPanedSetMinMax((Widget) messwidget, 40, 40);
  1835. X
  1836. X        /* create cursor hand */
  1837. X    hand = XCreateFontCursor(curdisplay, XC_hand1);
  1838. X
  1839. X    /* create text for displaying directory listings */
  1840. X    listsource = TCreateApAsSource();
  1841. X    ListArgs[0].value = (XtArgVal)listsource;
  1842. X    ListArgs[1].value = (XtArgVal)XtAsciiSinkCreate(outer, NULL, 0);
  1843. X    ListArgs[2].value = (XtArgVal)hand;
  1844. X    listwidget =  XtCreateManagedWidget("listWindow", 
  1845. X        textWidgetClass, outer, ListArgs, XtNumber(ListArgs));
  1846. X    XtPanedSetMinMax((Widget) listwidget, 250, 65535);
  1847. X    Modtext_Init(listwidget);
  1848. X
  1849. X    /* create third row */
  1850. X    Row3 = XtCreateManagedWidget("row3", boxWidgetClass, outer, NULL,0);
  1851. X    grepeditbutton     = makeCommandButton(Row3, "View/Edit", DoGrepEdit);
  1852. X    ModCommand_Init(grepeditbutton);
  1853. X    grepbutton     = makeCommandButton(Row3, "Grep", DoGrep);
  1854. X    ModCommand_Init(grepbutton);
  1855. X    grepwindow     = makeStringBox(Row3, searchpattern, 120);
  1856. X
  1857. X    /* create text for displaying directory listings */
  1858. X    grepsource = TCreateApAsSource();
  1859. X    grepArgs[0].value = (XtArgVal)grepsource;
  1860. X    grepArgs[1].value = (XtArgVal)XtAsciiSinkCreate(outer, NULL, 0);
  1861. X    grepArgs[2].value = (XtArgVal)hand;
  1862. X    grepwidget =  XtCreateManagedWidget("grepWindow", 
  1863. X        textWidgetClass, outer, grepArgs, XtNumber(grepArgs));
  1864. X    XtPanedSetMinMax((Widget) grepwidget, 150, 65535);
  1865. X    Modtext_Init(grepwidget);
  1866. X
  1867. X    {
  1868. X       static Dimension boxHeight;
  1869. X       static Arg getargs[] = {
  1870. X        { XtNheight, (XtArgVal)&boxHeight }
  1871. X       };
  1872. X
  1873. X    XtGetValues(quitbutton, getargs, XtNumber(getargs));
  1874. X    boxHeight += 8;
  1875. X    XtPanedSetMinMax((Widget) Row1, boxHeight, 65535);
  1876. X    XtPanedSetMinMax((Widget) Row2, boxHeight, 65535);
  1877. X    XtPanedSetMinMax((Widget) Row3, boxHeight, 65535);
  1878. X    }
  1879. X
  1880. X    XtPanedSetRefigureMode(outer, TRUE); 
  1881. X}
  1882. X
  1883. X
  1884. Xmain(argc, argv)
  1885. Xint argc;
  1886. Xchar **argv;
  1887. X{
  1888. X    char *cwd;
  1889. X    Pixmap icon;
  1890. X    Arg iconargs[1];
  1891. X   
  1892. X    static Dimension width, height;
  1893. X     static Arg args[]={
  1894. X       {XtNwidth, (XtArgVal) &width},
  1895. X       {XtNheight, (XtArgVal)&height} };
  1896. X    static Arg setargs[]={
  1897. X         {XtNwidth, 500},
  1898. X         {XtNheight,700} };
  1899. X
  1900. X    filepattern = XtMalloc(255);
  1901. X    searchpattern = XtMalloc(255);
  1902. X    curdirectory = XtMalloc(255);
  1903. X    oldpattern = XtMalloc(64);
  1904. X    cmdline = XtCalloc(1024, 1);
  1905. X
  1906. X    toplevel = XtInitialize( "xbrowser", "XBrowser", 
  1907. X        NULL, 0, &argc, argv);
  1908. X    XtGetValues(toplevel, args, XtNumber(args));
  1909. X    if(!width || !height){
  1910. X       XtSetValues(toplevel, setargs, XtNumber(setargs));
  1911. X    }
  1912. X
  1913. X    XtGetApplicationResources(toplevel, 0, resources,
  1914. X                                  XtNumber(resources),NULL, 0);
  1915. X    curdisplay = XtDisplay(toplevel);
  1916. X
  1917. X    if ( (cwd = getcwd((char *)NULL, 255)) == (char *)NULL)
  1918. X         XtError("\nxbrowser: cannot get current directory");
  1919. X
  1920. X    if (argv[1]) {
  1921. X       strcpy(curdirectory, cwd);
  1922. X       get_dirpat(argv[1], curdirectory, filepattern);
  1923. X    }
  1924. X      else get_dirpat(cwd, curdirectory, filepattern);
  1925. X
  1926. X    strcpy(oldpattern, filepattern);
  1927. X    reset_ownercache();
  1928. X
  1929. X    makeButtonsAndBoxes();
  1930. X
  1931. X    XtRealizeWidget(toplevel);
  1932. X    XDefineCursor( XtDisplay(toplevel), XtWindow(toplevel),
  1933. X        XCreateFontCursor(XtDisplay(toplevel), XC_left_ptr) );
  1934. X    setup_iconname();
  1935. X
  1936. X    /* define icon pixmap */
  1937. X    icon = XCreateBitmapFromData(curdisplay, 
  1938. X            DefaultRootWindow(curdisplay),
  1939. X            xbrowser_bits,
  1940. X            xbrowser_width,
  1941. X            xbrowser_height);
  1942. X    XtSetArg(iconargs[0], XtNiconPixmap, (XtArgVal)icon);
  1943. X    XtSetValues(toplevel, iconargs, XtNumber(iconargs));
  1944. X
  1945. X    create_log(); /* create log window; it must be created before
  1946. X            the popup window for the list options; otherwise
  1947. X            it does not create the scrollbar correctly;
  1948. X            I have no idea why */
  1949. X
  1950. X    XtMainLoop();
  1951. X}
  1952. X
  1953. END_OF_FILE
  1954. if test 8220 -ne `wc -c <'xfilebrowser.c'`; then
  1955.     echo shar: \"'xfilebrowser.c'\" unpacked with wrong size!
  1956. fi
  1957. # end of 'xfilebrowser.c'
  1958. fi
  1959. echo shar: End of archive 2 \(of 3\).
  1960. cp /dev/null ark2isdone
  1961. MISSING=""
  1962. for I in 1 2 3 ; do
  1963.     if test ! -f ark${I}isdone ; then
  1964.     MISSING="${MISSING} ${I}"
  1965.     fi
  1966. done
  1967. if test "${MISSING}" = "" ; then
  1968.     echo You have unpacked all 3 archives.
  1969.     rm -f ark[1-9]isdone
  1970. else
  1971.     echo You still need to unpack the following archives:
  1972.     echo "        " ${MISSING}
  1973. fi
  1974. ##  End of shell archive.
  1975. exit 0
  1976. -- 
  1977. Mike Wexler(wyse!mikew)    Phone: (408)433-1000 x1330
  1978. Moderator of comp.sources.x
  1979.